#include "recbox.h"
#include "ui_recbox.h"

RecBox::RecBox(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::RecBox),
    row(1),
    col(4)
{
    ui->setupUi(this);
    //用于测试是否可以放入对应得item
//    RecBoxItem* item = new RecBoxItem();
//    ui->recListUpHLayout->addWidget(item);
}

RecBox::~RecBox()
{
    delete ui;
}

void RecBox::initRecBoxUI(const QJsonArray &data, int row)
{
    //通过行数来判断是否需要隐藏下半部分的的list
    if(row == 2)
    {
        this->row = row;
        this->col = 8;
    }
    else
    {
        ui->recListDown->hide();
    }
    imageList = data;
    curIdx = 0;
    count = ceil(data.size()/col);
    createRecItem();
}

void RecBox::createRecItem()
{
    //在更新新的item之前需要把界面内已经存在的item删除掉
    QList<RecBoxItem*> recUpList = ui->recListUp->findChildren<RecBoxItem*>();
    for(auto item : recUpList)
    {
        ui->recListUpHLayout->removeWidget(item);
        delete item;
    }

    QList<RecBoxItem*> recDownList = ui->recListDown->findChildren<RecBoxItem*>();
    for(auto item : recDownList)
    {
        ui->recListDownHLayout->removeWidget(item);
        delete item;
    }

    int idx = 0;
    //将data中的数据写到ui中
    //这里要注意一组里面有col个
    for (int i = curIdx*col;i<col+curIdx*col;++i)
    {
        RecBoxItem* item = new RecBoxItem();
        QJsonObject obj = imageList[i].toObject();
        //设置图片以及对应的文本
        item->setText(obj.value("text").toString());
        item->setImage(obj.value("path").toString());
        //添加到对应的布局管理器中
        //这里因为有两个ui，需要进行分类
        //1.如果是推荐音乐只有单行，只需要对上部分进行渲染即可
        //2.如果是音乐补给就需要完成上下都渲染，row==2 col == 8
        if(row == 2 && idx >= col / 2)
        {
            ui->recListDownHLayout->addWidget(item);
        }
        else
        {
            ui->recListUpHLayout->addWidget(item);
        }
        ++idx;
    }
}


void RecBox::on_btUp_clicked()
{
    //点击按钮，显示前4张图片，如果已经是第一张图片就从后向前显示
    //这里的本质就是对下标进行修改，然后更新一下界面的内容即可
    --curIdx;
    if(curIdx < 0)
    {
        curIdx = count - 1;     //这里如果最开始还往前的话就放到最后一页即可
    }
    createRecItem();
}

void RecBox::on_btDown_clicked()
{
    //点击按钮，显示前8张图片，如果已经是第一张图片就从后向前显示
    ++curIdx;
    if(curIdx >= count)
    {
        curIdx = 0;     //这里如果最开始还往后的话就放到第一页即可
    }
    createRecItem();
}
